<?php
//+---------------------------------------------------------------------------------------------------------------------
//| 人生是荒芜的旅行，冷暖自知，苦乐在心
//+---------------------------------------------------------------------------------------------------------------------
//| Author:Janmas <janmas@126.com>
//+---------------------------------------------------------------------------------------------------------------------
//| 文件操作助手类 弃用
//+---------------------------------------------------------------------------------------------------------------------


namespace helper\file;

//写入，删除，修改，复制，移动，创建目录，删除目录，列出目录里的文件

use think\Exception;

class File
{

	/**
	 * 创建文件夹
	 * @param $path
	 * @param string $permession
	 * @param bool $mod
	 */
	 static function mkdir($path,$permession='0777',$mod=true){
	 	if(!is_writeable(dirname($path))){
			throw new Exception('权限不足，创建文件夹'.$path.'失败');
	    }elseif(is_dir($path)){
	 		return ;
	    }
		mkdir($path,$permession,$mod);
	}

	/**
	 * 新建文件
	 * @param $path
	 * @param null $atime
	 * @param null $ctime
	 * @throws \Exception
	 */
	 static function touch($path,$atime=null,$ctime=null){
		if(!is_dir(dirname($path))){
			self::mkdir(dirname($path),0777,true);
		}

		touch($path,$atime,$ctime);
	 }

	/**
	 * 删除文件或者文件夹
	 * @param $path
	 */
	static function remove($path){
		if(is_dir($path)){
			$dirs = self::isEmptyDir($path);
			if(!$dirs){
				rmdir($path);
			}else{
				foreach ($dirs as $value){
					if(in_array($value, ['.','..'])){
						continue;
					}
					self::remove($path.DIRECTORY_SEPARATOR.$value);
				}
				rmdir($path);
			}
		}else{
			if(is_file($path)){
				unlink($path);
			}
		}
	}

	/**
	 * 文件夹是否为空
	 * @param $dir
	 * @return array|false
	 */
	static function isEmptyDir($dir){
		$dirs = scandir($dir);
		if(!empty(array_diff($dirs,['.','..']))){
			return $dirs;
		}
		return false;
	}

	/**
	 * 检查文件或者目录是否存在
	 * @param string $path 路径
	 * @param false $create 没有是否创建
	 * @param string $mod 创建类型
	 * @return bool
	 */
	static function exists($path){
		if(is_file($path) || is_dir($path)){
			return true;
		}
		return false;
	}

	/**
	 * 移动文件或者文件夹
	 * @param $from
	 * @param $to
	 */
	 static function move($from,$to){
		//检查是文件还是目录
		self::copy($from, $to);
		self::remove($from);
	}

	/**
	 * 复制
	 * @param $from
	 * @param $to
	 * @return bool
	 */
	static function copy($from,$to){

		if(is_file($from)){
		    if(is_dir(dirname($to))){
                copy($from,$to);
            }else{
		        self::mkdir(dirname($to),0777,true);
                copy($from,$to);
            }
		}else{
			if(!self::exists($from)) return ;
			if(!self::exists($to)){
				self::mkdir($to);
			}
			$files = scandir($from);
			foreach ($files as $file){
				if($file == '.' || $file == '..'){
					continue;
				}
				self::copy($from.DIRECTORY_SEPARATOR.$file, $to.DIRECTORY_SEPARATOR.$file);
			}
			return true;
		}
	}
}